class EventBus {
    constructor() {
        this.events = {}
        // {
        //     hello: fn,
        //     world: fn
        // }
        // {
        //     hello: [fn1, fn2, fn3]
        // }
    }

    $on(eventName, callback) {
        // 收集 callback
        // this.events[eventName] = callback

        // 查找 this.events[eventName] 是否存在
        if (this.events[eventName]) {
            // 存在，push
            this.events[eventName].push(callback)
        } else {
            // 不存在，处理成一个数组
            this.events[eventName] = [callback]
        }
    }

    $emit(eventName, payload) {
        // 找到 this.evnets 中 eventName，然后执行它
        // this.events[eventName] && this.events[eventName](payload)

        if (this.events[eventName]) {
            // 循环数组中的每个 callback 做触发
            this.events[eventName].forEach(cb => {
                cb(payload)
            })
        }
    }
}

module.exports = new EventBus() // CommonJS 规范